#!/usr/bin/env python3
"""
翻页功能演示

展示如何配置和使用翻页功能
"""

import sys
import os
from pathlib import Path

# 添加项目路径
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'src'))

from config_loader import config_loader
import yaml

def demo_pagination_config():
    """演示翻页配置"""
    print("🔧 翻页功能配置演示")
    print("=" * 50)

    # 基本配置
    basic_config = {
        'pagination': {
            'enabled': True,
            'max_pages': 5,
            'page_delay': 3,
            'wait_for_load': 5
        }
    }

    print("📋 基本翻页配置:")
    print(yaml.dump(basic_config, default_flow_style=False, allow_unicode=True))

    # 高级配置
    advanced_config = {
        'pagination': {
            'enabled': True,
            'max_pages': 10,
            'page_delay': 2,
            'wait_for_load': 3
        },
        'selectors': {
            'pagination': '.ant-pagination',
            'next_page': '.ant-pagination-next',
            'page_numbers': '.ant-pagination-item a',
            'current_page': '.ant-pagination-item-active'
        }
    }

    print("🚀 高级翻页配置:")
    print(yaml.dump(advanced_config, default_flow_style=False, allow_unicode=True))

def demo_command_line_usage():
    """演示命令行用法"""
    print("\n💻 命令行使用示例")
    print("=" * 50)

    examples = [
        {
            'command': 'python src/main.py',
            'description': '使用配置文件默认设置（5页）'
        },
        {
            'command': 'python src/main.py --pages 3',
            'description': '爬取指定页数（3页）'
        },
        {
            'command': 'python src/main.py --pages 1',
            'description': '只爬取1页（禁用翻页）'
        },
        {
            'command': 'python src/main.py --pages 10',
            'description': '爬取更多页数（10页）'
        },
        {
            'command': 'python src/main.py --list',
            'description': '查看配置的网站列表'
        },
        {
            'command': 'python src/main.py --test',
            'description': '测试配置有效性'
        }
    ]

    for example in examples:
        print(f"📝 {example['command']}")
        print(f"   📖 {example['description']}")
        print()

def demo_performance_estimation():
    """演示性能预估"""
    print("⏱️ 性能预估")
    print("=" * 50)

    # 时间预估表
    performance_data = [
        {'pages': 1, 'time_min': 30, 'time_max': 40, 'data_estimate': '10条'},
        {'pages': 3, 'time_min': 60, 'time_max': 90, 'data_estimate': '30条'},
        {'pages': 5, 'time_min': 120, 'time_max': 180, 'data_estimate': '50条'},
        {'pages': 10, 'time_min': 300, 'time_max': 450, 'data_estimate': '100条'},
    ]

    print("📊 预估表格:")
    print(f"{'页数':<6} {'最短时间':<10} {'最长时间':<10} {'预估数据':<10}")
    print("-" * 45)

    for data in performance_data:
        print(f"{data['pages']:<6} {data['time_min']}秒{'':<6} {data['time_max']}秒{'':<6} {data['data_estimate']:<10}")

    print("\n💡 优化建议:")
    print("• 测试环境：建议2-3页")
    print("• 生产环境：建议5-10页")
    print("• 大量数据：分批次处理")

def demo_configuration_details():
    """演示配置详情"""
    print("\n⚙️ 配置参数详解")
    print("=" * 50)

    config_params = [
        {
            'param': 'enabled',
            'type': 'boolean',
            'default': 'true',
            'description': '是否启用翻页功能'
        },
        {
            'param': 'max_pages',
            'type': 'integer',
            'default': '5',
            'description': '最大爬取页数'
        },
        {
            'param': 'page_delay',
            'type': 'integer',
            'default': '3',
            'description': '翻页间隔时间（秒）'
        },
        {
            'param': 'wait_for_load',
            'type': 'integer',
            'default': '5',
            'description': '等待页面加载时间（秒）'
        }
    ]

    print(f"{'参数名':<15} {'类型':<10} {'默认值':<8} {'说明':<20}")
    print("-" * 65)

    for param in config_params:
        print(f"{param['param']:<15} {param['type']:<10} {param['default']:<8} {param['description']:<20}")

def demo_css_selectors():
    """演示CSS选择器配置"""
    print("\n🎯 CSS选择器配置")
    print("=" * 50)

    selectors = [
        {
            'name': 'pagination',
            'selector': '.ant-pagination',
            'description': '分页容器'
        },
        {
            'name': 'next_page',
            'selector': '.ant-pagination-next',
            'description': '下一页按钮'
        },
        {
            'name': 'page_numbers',
            'selector': '.ant-pagination-item a',
            'description': '页码链接'
        },
        {
            'name': 'current_page',
            'selector': '.ant-pagination-item-active',
            'description': '当前页标识'
        }
    ]

    print(f"{'名称':<15} {'选择器':<30} {'说明':<15}")
    print("-" * 70)

    for sel in selectors:
        print(f"{sel['name']:<15} {sel['selector']:<30} {sel['description']:<15}")

def demo_error_scenarios():
    """演示错误处理场景"""
    print("\n🚨 错误处理场景")
    print("=" * 50)

    error_scenarios = [
        {
            'scenario': '网络连接失败',
            'solution': '自动重试，记录错误日志'
        },
        {
            'scenario': '下一页按钮不存在',
            'solution': '停止翻页，返回已获取数据'
        },
        {
            'scenario': '页面加载超时',
            'solution': '使用默认等待时间，继续处理'
        },
        {
            'scenario': '字体解码失败',
            'solution': '每页重新处理字体混淆'
        },
        {
            'scenario': '数据解析错误',
            'solution': '跳过当前页，继续下一页'
        }
    ]

    print(f"{'错误场景':<20} {'解决方案':<30}")
    print("-" * 60)

    for scenario in error_scenarios:
        print(f"{scenario['scenario']:<20} {scenario['solution']:<30}")

def demo_current_config():
    """演示当前配置"""
    print("\n📄 当前项目配置")
    print("=" * 50)

    try:
        # 加载当前配置
        website_configs = config_loader.load_website_configs()

        if website_configs:
            config = website_configs[0]  # 第一个配置

            print(f"网站名称: {config.name}")
            print(f"URL: {config.url}")
            print(f"爬虫类型: {config.scraper_type}")

            # 检查分页配置
            pagination_config = config.selectors.get('special_config', {}).get('pagination', {})

            if pagination_config:
                print(f"\n翻页配置:")
                print(f"  启用状态: {pagination_config.get('enabled', 'false')}")
                print(f"  最大页数: {pagination_config.get('max_pages', '未设置')}")
                print(f"  翻页延时: {pagination_config.get('page_delay', '未设置')}秒")
                print(f"  加载等待: {pagination_config.get('wait_for_load', '未设置')}秒")
            else:
                print("\n⚠️  未配置翻页功能")
        else:
            print("❌ 未找到网站配置")

    except Exception as e:
        print(f"❌ 读取配置失败: {e}")

def main():
    """主函数"""
    print("🚀 翻页功能演示程序")
    print("符合openUBMC社区开发规范")
    print("=" * 60)

    # 演示各个功能
    demo_pagination_config()
    demo_command_line_usage()
    demo_performance_estimation()
    demo_configuration_details()
    demo_css_selectors()
    demo_error_scenarios()
    demo_current_config()

    print("\n✅ 演示完成！")
    print("\n📚 更多信息请查看:")
    print("  • docs/pagination_guide.md - 详细使用指南")
    print("  • config/urls.yaml - 配置文件")
    print("  • src/scraper/zjzwfw_scraper.py - 实现代码")

if __name__ == "__main__":
    main()
